﻿///***************************************************************
/// 시  스  템 : SMFramework
/// 단위시스템 : Utility
/// 계      층 : Framework Utility
/// 프로그램명 : ValidationUtil
/// 파  일  명 : ValidationUtil.cs
/// 설      명 : 유효성검사관련 유틸리티
///***************************************************************
/// 수정ID 일자       이름     내용
///---------------------------------------------------------------
/// CH001  2008-07-02 송시명   최초 작성
///***************************************************************
///
using System;
using System.Text.RegularExpressions;

using SMFramework.Configuration;

namespace SMFramework.Utility
{
	/// <summary>
	/// 유효성검사관련 유틸리티
	/// </summary>
    public class ValidationUtil
	{
		#region 날짜형식 체크

		/// <summary>
		/// 날짜형식 검사 (yyyyMMdd)
		/// </summary>
		/// <param name="ps_data">데이터</param>
		/// <returns></returns>
		public static bool IsEightDate(string ps_data)
		{
			bool lb_result = true;

            string ls_date = ConversionUtil.ExtractNumberStr(ps_data);	//숫자만 추출

			if (ls_date.Length != 8)
			{
				return false;
			}
			else
			{
				int li_year = Convert.ToInt32(ls_date.Substring(0, 4));
				int li_month = Convert.ToInt32(ls_date.Substring(4, 2));
				int li_day = Convert.ToInt32(ls_date.Substring(6, 2));

				try
				{
					DateTime lo_temp = new DateTime(li_year, li_month, li_day);
				}
				catch
				{
					lb_result = false;
				}
			}
			
			return lb_result;
		}

		/// <summary>
		/// 날짜형식 검사
		/// </summary>
		/// <param name="ps_data">데이터</param>
		/// <returns></returns>
		public static bool IsDate(string ps_data)
		{
			bool lb_rslt = true;
			try
			{
				DateTime lo_temp = DateTime.Parse(ps_data);
			}
			catch
			{
				lb_rslt = false;
			}

			return lb_rslt;
		}


		/// <summary>
		/// 날짜마스크형식 검사
		/// </summary>
		/// <param name="ps_mask">마스크</param>
		/// <returns></returns>
		public static bool IsDateMask(string ps_mask)
		{
			bool lb_rslt = true;
			try
			{
				string ls_dt = DateTime.Now.ToString(ps_mask);
			}
			catch
			{
				lb_rslt = false;
			}
			return lb_rslt;
		}
		
		#endregion

		#region 이메일 형식 체크

		/// <summary>
		/// 이메일 형식 체크
		/// </summary>
		/// <param name="ps_data">데이터</param>
		/// <returns></returns>
		public static bool IsValidEmail(string ps_data)
		{
			bool lb_result = false;
			Regex rex_pattern = new Regex(@"^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$");

			if (!String.IsNullOrEmpty(ps_data))
			{
				lb_result = rex_pattern.IsMatch(ps_data);
			}

			return lb_result;
		}
		
		#endregion

		#region 전화번호 형식 체크

		/// <summary>
		/// 전화번호 형식 체크
		/// </summary>
		/// <param name="ps_data">데이터</param>
		/// <returns></returns>
		public static bool IsValidPhoneNum(string ps_data)
		{
			bool lb_result = false;
			Regex rex_pattern = new Regex(@"^\d{2,3}-\d{3,4}-\d{4}$");

			if (!String.IsNullOrEmpty(ps_data))
			{
				lb_result = rex_pattern.IsMatch(ps_data);
			}

			return lb_result;
		}
		
		#endregion
		
		#region 파일확장자 체크

		/// <summary>
		/// 확장자 체크
		/// </summary>
		/// <param name="ps_file_ext">데이터</param>
		/// <param name="pa_file_ext">데이터</param>
		/// <returns></returns>
		public static bool IsFileExt(string ps_file_ext, string[] pa_file_ext)
		{
			bool lb_result = false;
			foreach (string ls_ext in pa_file_ext)
			{
				if (ps_file_ext.Trim().ToUpper().Equals(ls_ext.Trim()))
				{
					lb_result = true;
					break;
				}
			}

			return lb_result;
		}
		

		/// <summary>
		/// 이미지 확장자 체크 / 설정된 확장자이면 True
		/// </summary>
		/// <param name="ps_file_ext">데이터</param>
		/// <returns></returns>
		public static bool IsFileExtImg(string ps_file_ext)
		{
			string[] la_file_ext = WebConfig.SMFramework["FileExt.Img"].Split(',');
			return IsFileExt(ps_file_ext, la_file_ext);
		}

		/// <summary>
		/// 문서 확장자 체크 / 설정된 확장자이면 True
		/// </summary>
		/// <param name="ps_file_ext">데이터</param>
		/// <returns></returns>
		public static bool IsFileExtDoc(string ps_file_ext)
		{
			string[] la_file_ext = WebConfig.SMFramework["FileExt.Doc"].Split(',');
			return IsFileExt(ps_file_ext, la_file_ext);
		}

		/// <summary>
		/// 지정된 전체 확장자 체크 / 문서 + 이미지 + 기타
		/// </summary>
		/// <param name="ps_file_ext">데이터</param>
		/// <returns></returns>
		public static bool IsFileExtAll(string ps_file_ext)
		{
			string ls_file_img = WebConfig.SMFramework["FileExt.Img"].ToString();
			string ls_file_doc = WebConfig.SMFramework["FileExt.Doc"].ToString();
			string ls_file_etc = WebConfig.SMFramework["FileExt.Etc"].ToString();

			string[] la_file_ext = (ls_file_img +","+ ls_file_doc +","+ ls_file_etc).Split(',');

			return IsFileExt(ps_file_ext, la_file_ext);
		}
		#endregion		
		
		#region 배열의 값 존재 체크

		/// <summary>
		/// 배열에 특정값이 있는지 여부 검사
		/// </summary>
		/// <param name="pa_array"></param>
		/// <param name="ps_data"></param>
		/// <returns></returns>
		public static bool IsExistValueAtArray(string[] pa_array, string ps_data)
		{
			for (int i = 0; i < pa_array.Length; i++)
			{
				if (pa_array[i].ToString() == ps_data)
				{
					return true;
				}
			}

			return false;
		}
		
		#endregion

	}
}
